Copyright(C) 1994,1995,1996,1997 Terumasa KODAKA , Takeshi KONO
■フロッピーディスクインターフェース
解説  o PC-9800のフロッピーディスクインターフェース(320KB FD I/Fを除く)では、
	FDC(Floppy Disk Controller)にμPD765Aを使用している。
      o PC-9800シリーズでは、640KBインタフェースと、1MBインタフェースの2つの
	インタフェースが存在する。PC-9801初代・E・F・Mのでは、この2つのインタフェ
	ースは共存可能であり、I/Oポートアドレス、外部割り込み番号、DMAチャネル
	番号、BIOSワークエリアは全て異なったものを使用する。PC-9801VM(正確にはP
	C-98XAが最初)以降では、両用FD I/Fがサポートされ、内蔵のFDDでは640KBフ
	ォーマットと1MBフォーマットの両方が使用できる。
      o 両用FD I/Fでは、従来のインターフェースとの互換性のために、1MB FD専用
	I/Fと同じI/Oポートアドレス、外部割り込み番号、DMAチャネル番号、BIOSワ
	ークエリアを用いるモード(1MB I/Fモード)と、640KB FD専用I/Fと同じI/Oポ
	ートアドレス等を用いるモード(640KB I/Fモード)が用意されている。I/Fモ
	ードは、起動時にDIP SW 3-1,3-2の状態、およびブートに使用されるメディア
	等によって決定される。工場出荷時状態(DIP SW 3-1,3-2ともOFF)では、1MB
	フォーマットのFDから起動すると1MB I/Fモードに、640KBフォーマットのFD
	から起動すると640KB I/Fモードに自動的に設定される、自動モードである。
	-------------------------------------+---------------------------------
	機種                                 |使用するI/Oポート
	-------------------------------------+---------------------------------
	1MB専用インターフェース              |0090h, 0092h, 0094h
	640KB専用I/F                         |00C8h, 00CAh, 00CCh
	両用FD I/F(1MB I/Fモード)            |0090h, 0092h, 0094h, 00BEh
	両用FD I/F(640KB I/Fモード)          |00C8h, 00CAh, 00CCh, 00BEh
	1.44MB対応両用FD I/F(1MB I/Fモード)  |0090h, 0092h, 0094h, 00BEh, 04BEh
	1.44MB対応両用FD I/F(640KB I/Fモード)|00C8h, 00CAh, 00CCh, 00BEh, 04BEh
	-------------------------------------+---------------------------------
	* 1.44MB対応両用FD I/Fは、640KB I/Fモードに設定すると、
	  1.44MBフォーマットのディスクにアクセスできない。
I/O	0090h,00C8h
名前	ステータスレジスタ
対象	
チップ	μPD765A相当
機能
	[READ]	ステータスレジスタリード
	bit 7: RQM(Request for Master)
		1= FDCがデータ受け付け中、またはデータ送信準備完了
		0= FDCがデータ受け取り不可、またはデータ送信準備未完了
	bit 6: DIO(Data Input/Output)
		1= FDC→ホスト方向転送
		0= ホスト→FDC方向転送
	bit 5: NDM(Non-DMA Mode)
		1= FDCがNonDMAモードでデータ転送中でサービスを要求している
		0= FDCのサービス要求なし
	bit 4: CB(FDC Busy)
		1= FDCがコマンドを実行中
		0= FDCはコマンドを受け付け可能
	bit 3: D3B(FD3 Busy)
	bit 2: D2B(FD2 Busy)
	bit 1: D1B(FD1 Busy)
	bit 0: D0B(FD0 Busy)
		1= FDDがシーク中
		0= FDDはシーク中でない
	[WRITE]	禁止
解説  o μPD765A(FDC:Floppy Disk Controller)のステータスを示す。
	詳細はμPD765Aのデータシートを参照。
      o I/Oアドレスは、FD I/Fの種類、モードにより以下のようになる。
	-------------------+---------------------------------------
	使用するI/Oアドレス|FD I/Fの種類、モード
	-------------------+---------------------------------------
	0090h              |PC-9801-15,PC-9801初代・M内蔵FD I/F,
	                   |両用FD I/Fの1MB I/Fモード
	00C8h              |PC-9801-08・09,PC-9801F・U・VF内蔵FD I/F,
	                   |両用FD I/Fの640KB I/Fモード
	-------------------+---------------------------------------
関連	I/O 0092h
	I/O 00CAh
I/O	0092h,00CAh
名前	データレジスタ
対象	
チップ	μPD765A相当
機能
	[READ]	データレジスタ読み込み
	[WRITE]	データレジスタ書き込み
		[コマンド一覧]
		----------------+----------------------------------
		コマンド		|コマンド名称
		----------------+----------------------------------
		0x000010b	|READ DIAGNOSTIC
		00000011b	|SPECIFY
		00000100b	|SENSE DEVICE STATUS
		xx000101b	|WRITE DATA
		xxx00110b	|READ DATA
		00000111b	|RECALIBRATE
		00001000b	|SENSE INTERRUPT STATUS
		xx001001b	|WRITE DELETED DATA
		0xx01010b	|READ ID
		xxx01100b	|READ DELETED DATA
		0x001101b	|WRITE ID
		00001111b	|SEEK
		xxx10001b	|SCAN EQUAL
		xxx11001b	|SCAN LOW OR EQUAL
		xxx11101b	|SCAN HIGH OR EQUAL
		その他		|INVALID
		----------------+----------------------------------
解説  o μPD765A(FDC)とCPUの間で、各種情報(コマンド,パラメータ,データ,リザルト
	ステータス)を交換するためのデータレジスタにアクセスするためのポート。
	詳細はμPD765Aのデータシートを参照。
      o I/Oアドレスは、FD I/Fの種類、モードにより以下のようになる。
	-------------------+---------------------------------------
	使用するI/Oアドレス|FD I/Fの種類、モード
	-------------------+---------------------------------------
	0092h              |PC-9801-15,PC-9801初代・M内蔵FD I/F,
	                   |両用FD I/Fの1MB I/Fモード
	00CAh              |PC-9801-08・09,PC-9801F・U・VF内蔵FD I/F,
	                   |両用FD I/Fの640KB I/Fモード
	-------------------+---------------------------------------
関連	I/O 0090h
	I/O 00C8h
	0000:0564〜0583h
	0000:05D0〜05D6h
I/O	0094h,00CCh
名前	コントロールレジスタ,リードスイッチ/シグナル
対象	ノーマル, PC-98LT・HA
チップ	
機能
	[READ]	リードスイッチ/シグナル ■[PC-9801初代を除く]
	
	bit 7: FINT1 - FDD I/Fボード上のDIP SW 1-7(割込番号設定)の状態
		1= OFF
		0= ON(既定値)
		* PC-9801-08・09・15,PC-9801F・M内蔵FD I/F上のDIP SWの状態。
		  両用FD I/Fでは0に固定。
	bit 6: FINT0 - FDD I/Fボード上のDIP SW 1-6(割込番号設定)の状態
		1= OFF(既定値)
		0= ON
		* PC-9801-08・09・15,PC-9801F・M内蔵FD I/F上のDIP SWの状態。
		  両用FD I/Fでは1に固定。
	bit 5: DMACH - FDD I/Fボード上のDIP SW 1-3(DMAチャネル設定)の状態
		1= OFF(PC-9801-08・09,PC-9801F内蔵FD I/Fの既定値)
		0= ON(PC-9801-15,PC-9801初代・M内蔵FD I/Fの既定値)
		* PC-9801-08・09・15,PC-9801F・M内蔵FD I/F上のDIP SWの状態。
		  両用FD I/Fでは、1MB I/Fモード時0に固定、
		  640KB I/Fモード時1に固定。
	bit 4: RDY - FDDのRDY端子の状態 ■[640KB I/Fのみ]
		* PC-9801-08・09,両用FD I/Fの640KB I/Fモード時のみ有効。
		* テクニカルデータブックで、PC-9801初代のみPSTB#マスクの
		  機能であるという記述があるが、PSTB#マスクはライト時の機能
		  なので、実際にはPC-9801初代でこのビットは未使用。
		
	bit 3,2: TYP1,TYP0 - ドライブ番号割り当て状態 ■[両用FD I/Fのみ]
		10b= 内蔵FDDが#3,#4、外付FDDが#1,#2(DIP SW 1-4=ON)
		01b= 内蔵FDDが#1,#2、外付FDDが#3,#4(DIP SW 1-4=OFF)
		* FDDの接続状態を示す。
		* このビットは両用FD I/Fでのみ有効。PC-9801-08・09・15と
		  PC-9801初代・F・M・U内蔵FD I/Fでは未定義。
		  PC-9801VF内蔵のFD I/Fは常に00bを示す。
		* 従来、両用FD I/Fを備えている機種では、内蔵している(最大)2台の
		  FDDだけが両用ドライブで、FD I/Fコネクタ経由で外部に増設した
		  FDDは1MB専用ドライブとしてしか使えなかった。このため、従来は
		  このビットの状態から、どのドライブが両用ドライブなのかを判断
		  することができた(例えば、TYP0が1なら#1,#2ドライブが
		  両用ドライブと判断できた)。
		  ところが、ファイルスロットまたはファイルベイを搭載している
		  機種では、最大3台のFDDを内蔵することができるようになった。
		  この場合、内蔵の3台のドライブは両用ドライブとして使用できる
		  が(ファイルスロットにPC-9801-F04を実装したときを除く)、さらに
		  FDDを1台外付した場合は、そのドライブは非両用ドライブとなる。
		  このため現在では、このビットの状態からどれが両用ドライブかを
		  判断することはできなくなった。VFDDRV.EXE(仮想FDドライバ)が
		  提供するドライブも含め、正しく両用/非両用を判断するため
		  には、ディスクBIOSのINT 1Bh - Function 84h(FD),C4h(FD)を使う
		  必要がある。
		関連: INT 1Bh - Function 84h(FD)
		      INT 1Bh - Function C4h(FD)
		      DIP SW 1-4
	bit 1,0: 00b
		* 両用FD I/FとPC-9801VF内蔵FD I/Fのみ定義。PC-9801-08・09・15と
		  PC-9801初代・F・M・U内蔵FD I/Fでは未定義。
	[WRITE]	ライトコントロールレジスタ
	bit 7: RST(Reset)
		1= FDCリセット
		0= NOP
		* μPD765AのRESET端子への入力信号。
	bit 6: FRY(Forced Ready)
		1= RDY信号を強制的にアクティブ
		0= NOP
		* μPD765AのRDY端子への入力信号。ドライブからのRDY信号と
		  ORしたあとFDCに入力される。
		* PC-9801-08・09,PC-9801F内蔵FD I/Fでは未使用。これらのI/Fでは、
		  FDCのRDY信号線は常時プルアップされている。
	bit 5: AIE(Attention Interrupt Enable) ■[640KB I/Fのみ]
		1= FRY(bit 6)の状態変更を許可する
		0= FRY(bit 6)の状態変更を禁止する
		* PC-9801U・VF内蔵FD I/Fと両用FD I/Fの640KB I/Fモードでのみ
		  有効。
	bit 4: 
	       DMAE(DMA Enable) - DMA使用の選択 ■[PC-9801初代以外]
		1= DMAモード
		0= プログラムI/Oモード
		* DMAでデータ転送するとき、DMACからのDRQ,DACK信号を
		  有効にするための許可ビット。DMA使用時1にする。0のとき、
		  拡張バスの(FD I/Fが使用するのと同じ番号の)DRQ,DACK信号線は
		  他のボードが使用できる。
	       PSTB - プリンタのPSTB#のマスク ■[PC-9801初代]
		* プリンタのPSTB#信号をマスクする。システムリセット時、
		  0にセットされている。プリンタI/Fの8255Aを初期設定したあと
		  1にする。
		* 他機種では、I/O 0035h bit 6で制御。
	bit 3: MTON(Motor ON) - スピンドルモータ制御
		1= モータON
		0= モータOFF
		* PC-9801-08・09,PC-9801F・U・VF内蔵FD I/F,両用FD I/F(PC-9801VM2・
		  VM21・VX2・VX21・UV2・UV21の1MB I/Fモードを除く)のみ使用。
		* FDDのMOTOR信号を制御する。スピンドルモータの回転・停止を
		  制御できる。ただし、両用FD I/Fの1MB I/Fモード時は、
		  I/O 00BEh bit 2に1をライトした場合だけ有効。また、
		  PC-9801VM2・VM21・VX2・VX21・UV2・UV21の1MB I/Fモードでは、
		  このビットは無効。
		関連: I/O 00BEh bit 2(Write)
	bit 2: TMSK(Timer Interrupt Mask) - タイマ割り込みマスク制御
		1= タイマ割り込み許可
		0= タイマ割り込みマスク
		* PC-9801-08・09,PC-9801F・U・VF内蔵FD I/F,両用FD I/F(PC-9801VM2・
		  VM21・VX2・VX21・UV2・UV21の1MB I/Fモードを除く)のみ使用。
		* VFOからのタイマ割り込みのマスク制御を行う。VFOの割り込み
		  トリガはTTRG(bit 0)。
		u テクニカルデータブックでは、両用FD I/Fの1MB I/Fモードでは
		  このビットは未定義になっているが、PC-9801VM2・VM21・VX2・VX21・
		  UV2・UV21以外の両用FD I/F搭載機ではこのビットは有効。
	bit 1: 未使用
	bit 0: TTRG(Timer Trigger) - VFOのTRIG IN端子制御
		1= トリガ
		0= NOP
		* PC-9801-08・09,PC-9801F・U・VF内蔵FD I/F,両用FD I/F(PC-9801VM2・
		  VM21・VX2・VX21・UV2・UV21の1MB I/Fモードを除く)のみ使用。
		* VFOのTRIG IN端子を制御する。このビットを1にしてライトすると
		  100ms後に割り込みが発生する。ただし、TMSK(bit 2)でVFOからの
		  割り込みをマスクすることができる。
		u テクニカルデータブックでは、両用FD I/Fの1MB I/Fモードでは
		  このビットは未定義になっているが、PC-9801VM2・VM21・VX2・VX21・
		  UV2・UV21以外の両用FD I/F搭載機ではこのビットは有効。
	
	
	
解説  o FD I/Fの制御を行うためのFDC外部回路のI/Oポート。
      o PC-9801初代の内蔵FD I/Fでは、I/O 0094hのリードは未定義。
      o I/Oアドレスは、FD I/Fの種類、モードにより以下のようになる。
	-------------------+---------------------------------------
	使用するI/Oアドレス|FD I/Fの種類、モード
	-------------------+---------------------------------------
	0094h              |PC-9801-15,PC-9801初代・M内蔵FD I/F,
	                   |両用FD I/Fの1MB I/Fモード
	00CCh              |PC-9801-08・09,PC-9801F・U・VF内蔵FD I/F,
	                   |両用FD I/Fの640KB I/Fモード
	-------------------+---------------------------------------
      u 一部機種では、I/O 0096h(I/O 00CEh)にI/O 0094h(I/O 00CCh)の
	デコードイメージが出ている。
関連	I/O 00BEh
I/O	0094h
名前	コントロールレジスタ,リードスイッチ/シグナル
対象	ハイレゾ
チップ	
機能
	[READ]	リードスイッチ/シグナル
	bit 7: MODE - 内蔵ドライブの有無
		1= なし
		0= あり
	bit 6: 0
	bit 5: HD(High Density) - アクセスモード状態
		1= 640KBアクセスモード
		0= 1MBアクセスモード
		* 現在のアクセスモードを示す。
	bit 4: 0
	bit 3〜0: 未定義
	[WRITE]	ライトコントロールレジスタ
	bit 7: RST(Reset)
		1= FDCリセット
		0= NOP
		* μPD765AのRESET端子への入力信号。
	bit 6: FRY(Forced Ready)
		1= RDY信号を強制的にアクティブ
		0= NOP
		* μPD765AのRDY端子への入力信号。ドライブからのRDY信号と
		  ORしたあとFDCに入力される。
	bit 5: HD(High Density) - アクセスモード指定
		1= 640KBアクセスモード
		0= 1MBアクセスモード
	bit 4: 未使用
	bit 3: MTON(Motor ON) - スピンドルモータ制御 ■[PC-98XA・XLを除く]
		1= モータON
		0= モータOFF
		* FDDのMOTOR信号を制御する。スピンドルモータの回転・停止を
		  制御できる。ただし、I/O 00BEh bit 2に1をライトした場合だけ
		  有効。
		関連: I/O 00BEh bit 2(Write)
	bit 2: TMSK(Timer Interrupt Mask) - タイマ割り込みマスク制御
							■[PC-98XA・XLを除く]
		1= タイマ割り込み許可
		0= タイマ割り込みマスク
		* VFOからのタイマ割り込みのマスク制御を行う。VFOの割り込み
		  トリガはTTRG(bit 0)。
		u テクニカルデータブックでは、このビットは未定義になっている
		  が、PC-98XA・XL以外のハイレゾモードではこのビットは有効。
	bit 1: 未使用
	bit 0: TTRG(Timer Trigger) - VFOのTRIG IN端子制御
							■[PC-98XA・XLを除く]
		1= トリガ
		0= NOP
		* VFOのTRIG IN端子を制御する。このビットを1にしてライトすると
		  100ms後に割り込みが発生する。ただし、TMSK(bit 2)でVFOからの
		  割り込みをマスクすることができる。
		u テクニカルデータブックでは、このビットは未定義になっている
		  が、PC-98XA・XL以外のハイレゾモードではこのビットは有効。
	
	
解説  o FD I/Fの制御を行うためのFDC外部回路のI/Oポート。
関連	0000:05CBh
I/O	00BEh
名前	両用FD I/F制御
対象	ノーマル,PC-98LT・HA
	
チップ	
機能	
	[READ]	リードモードステータス
	bit 7〜4: 未定義
	bit 3: DSW(Dip Switch) - 本体DIP SW3-2の状態
		1= OFF(1MB指定)
		0= ON (640KB指定)
		* 本体のDIP SW 3-2の状態を示す。
	bit 2: FIX(Fix Mode) - DIP SW3-1の状態
		1= ON (固定モード…PORT EXC無効)
		0= OFF(自動切換モード…PORT EXC有効)
		* 本体のDIP SW 3-1の状態を示す。
	bit 1: FDD EXC(FDD FDD Mode Exchange) - アクセスモード状態
		1= 1MB アクセスモード
		0= 640KB アクセスモード
		* 現在のアクセスモードを示す。
	bit 0: PORT EXC(Port Exchange) - I/Fモード状態
		1= 1MB I/Fモード
		0= 640KB I/Fモード
		* 現在のI/Fモードを示す。
	[WRITE]	ライトモードチェンジ
	bit 7〜3: 00000bを指定する
	bit 2: EMTON(Enable Motor ON) - I/O 0094h bit 3(MTON)の有効/無効
		1= 1MB I/Fモード時、MTONビットを有効にする
		0= 1MB I/Fモード時、常時モータON
		* PC-9801VM2・VM21・UV2・UV21・VX2・VX21,PC-98XLを除く
		  両用FD I/F搭載機で有効。
	bit 1: FDD EXC(FDD Mode Exchange) - アクセスモード指定
		1= 1MB アクセスモード
		0= 640KB アクセスモード
		* 両用FD I/Fでフロッピーディスクを読み書きする際のアクセス
		  モードを指定する。
	bit 0: PORT EXC(Port Exchange) - I/Fモード指定
		1= 1MB I/Fモード
		0= 640KB I/Fモード
		* 両用FD I/FのI/Fモードを指定する。I/Fモードを変更すると、
		  FDCのI/Oポート、割り込み番号、DMAチャネルなどが同時に
		  変化するので、通常はシステム起動時に設定したモードのまま
		  使用する。
解説  o 両用FD I/Fの制御を行うポート。
      u PC-9801VF2内蔵FD I/Fは640KB専用だが、このポートが存在する。ただし、
	DIP SW状態の読み出しはできない。起動時状態では00hが読み出せる。
	bit 3,2では、書き込んだ値が読み出せる。
関連	I/O 04BEh
	I/O 0094h bit 3
	0000:05CBh
I/O	00BEh
名前	Enable Motor ON制御
対象	ハイレゾ(PC-98XA・XLを除く)
チップ	
機能	
	[READ]
	bit 7〜0: 未定義
	
	[WRITE]
	bit 7〜3:00000bを指定する
	bit 2: EMTON(Enable Motor ON) - I/O 0094h bit 3(MTON)の有効/無効
		1= MTONビットを有効にする
		0= 常時モータON
	bit 1,0: 00bを指定する
解説  o FDDモータの制御を有効にするかどうか設定する。
関連	I/O 0094h bit 3
I/O	04BEh
名前	3モードFD I/F制御
	Undocumented
対象	1.44MB FDD搭載機種
チップ	
機能	
	[READ]	状態読み出し
	bit 7〜5: 未使用?(常に111b)
	bit 4: 1.44MB対応ドライブ識別
		1= 1.44MBアクセス可能
		0= 1.44MBアクセス不可能
		* 1.44MBアクセスは1MB I/Fモード時のみ可能。640KB I/Fモード
		  時は、どのドライブも0(1.44MBアクセス不可能)を示す。
	bit 3〜1: 未使用?(常に111b)
	bit 0: 現在のアクセスモード
		1= 1.44MBアクセスモード
		0= 1MB/640KBアクセスモード
	[WRITE]	ドライブ/モード指定
	bit 7: 未使用?(0を指定)
	bit 6,5: ドライブ指定
		10b= 内蔵FDD 2台モデルに実装したファイルスロット内FDDを指定
		01b= 内蔵FDD 2台目または
		     内蔵FDD 1台モデルに実装したファイルスロット内FDDを指定
		00b= 内蔵FDD 1台目を指定
		* ドライブ指定値は、DIP SW 1-4(内蔵FDD番号)の状態に関らず一定。
	bit 4: 動作モード指定
		1= アクセスモード変更(bit 0の値が有効)
		0= 無動作(状態読出のためのドライブ指定)
	bit 3〜1: 未使用?(000bを指定)
	bit 0: アクセスモード指定(bit 4=1のときのみ変更される)
		1= 1.44MBアクセスモード
		0= 1MB/640KBアクセスモード
解説  o 3モード(1.44MB,1MB,640KB)対応機で、1.44MBアクセスを行う場合の制御に
	使用する。
      o リードを行う前に、必ずライトしてドライブを指定しておく必要がある。
      o 1.44MB FDD搭載機かどうかを調べるとき、このポートから読んだ値がFFhか
	どうかで判断することはできない。I/O 00BEhのデコードイメージが
	I/O 04BEhに出ている機種があるため。
関連	I/O 00BEh